package com.example.common.constants;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: Allen
 * @create: 2025/7/10 17:55
 * @description: 客户端和服务器协议号
 **/
public enum Code {

    //===========================> 100000 - 199999  Gate 第二位是 <=========================
    GT_Heartbeat(100001, "心跳客户端每5秒一次并且返回服务器时间戳", ""),


    //===========================> 200000 - 299999  Lobby <=========================

    // ========================================
    // 基础系统 消息号 01000 - 20000 end
    // ========================================

    /** 01000 登录 */
    L_Honor_Login(201001, "荣耀登录", ""),

    /** 02000 系统 */
    L_GM(202001, "GM", ""),
    L_Sys_Notice(202002, "公告", ""),

    /** 03000 邮件 */
    L_Mail_Notice(203001, "邮件通知", ""),


    // ========================================
    // 游戏级别功能 消息号 21000 - 30000 start
    // ========================================

    /** 21000 比赛 */
    L_Game_Start(221001, "游戏开始", ""),


    // ========================================
    // 运营和活到级别功能 消息号 31000 - 40000 start
    // ========================================

    /** 31000 活动 */
    L_Activity_Info(231001, "活动信息", ""),



    //===========================> 300000 - 399999  Game <=========================

    ;
    /**
     * 消息号
     */
    private final int code;

    /**
     * 描述
     */
    private final String tip;

    /**
     * 旧版的url地址
     */
    private final String path;

    public int getCode() {
        return code;
    }

    public String getTip() {
        return tip;
    }

    public String getPath() {
        return path;
    }

    Code(int code, String tip, String path) {
        this.code = code;
        this.tip = tip;
        this.path = path;
    }


    private static final Map<Integer, Code> cache = new HashMap<>();

    static {
        for (Code t : values()) {
            if (cache.containsKey(t.getCode())) {
                throw new IllegalStateException("repeat code:" + t.getCode());
            }
            cache.put(t.getCode(), t);
        }
    }

    public static Code convert(int code) {
        return cache.get(code);
    }
}